home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 May
/
EnigmA AMIGA RUN 07 (1996)(G.R. Edizioni)(IT)[!][issue 1996-05][EARSAN CD VI].iso
/
docs
/
corsoguide
/
semafori-9.txt
< prev
next >
Wrap
Text File
|
1992-09-03
|
3KB
|
41 lines
I semafori
E ci riferiamo naturalmente non a quelli dell'incrocio sotto casa; questo è
un argomento che tratteremo data la sua importanza teorica, e non vi
capiterà quasi mai di utilizzare i semafori direttamente, ma sempre mediante
apposite funzioni del s.o. che verranno illustrate di volta in volta.
In un sistema multitasking quale è l'Amiga, le risorse del sistema vengono
condivise fra più task per cui bisogna far attenzione che, quando una
risorsa viene utilizzata da un task, non deve essere accedibile da un
altro; immaginate ad esempio cosa può succedere se, mentre un
word-processor sta stampando un testo, un altro task che può essere un
programma di grafica tenta di stampare anch'egli; in una tale evenienza i
dati miscelandosi sulla parallela produrranno dei risultati catastrofici.
Per cui vengono implementate dal sistema delle funzioni di bloccaggio e
sbloccaggio (lock e unlock) e sono utilizzate dal task che deve
rispettivamente appropiarsi della risorsa per usarla e una volta finito,
rilasciarla al sistema; mentre la risorsa è bloccata nessun altro può
accedervi finché non viene liberata. Bisogna stare attenti nell'utilizzo di
queste funzioni di lock e unlock perché si entra facilmente nelle
situazioni di stallo dette in inglese dead-lock; qualche tempo fa capitò
proprio una situazione di questo tipo con una risorsa del sistema che tutti
conoscete benissimo: il Blitter (ebbene sì lo ammetto, anche io sbaglio);
in questa situazione ci si appropriava della risorsa mediante la funzione
di bloccaggio relativa (OwnBlitter che vedremo in una delle prossime
puntate) e prima di rilasciarla si utilizzava la funzione Text della
graphics.library (scrive un testo specificato) che utilizza il Blitter per
la scrittura del testo; il programma si bloccava, poiché per andare avanti
attendeva il ritorno della funzione Text, ma quest'ultima allo stesso tempo
attendeva che il Blitter venisse liberato.
Il metodo per gestire le risorse è basato su questo principio ma è molto più
efficiente: i semafori; infatti con il semplice bloccaggio della risorsa,
non si assicura che tutti la possano utilizzare equamente, poiché se un
processo si accorge che la risorsa è occupata e preferisce fare qualche
altra cosa, al momento del rilascio della risorsa un altro task potrebbe
controllare prima di lui e occuparla anche se ne aveva diritto il task di
prima. I semafori non sono altro che liste che indicano quale sarà il task
che ha diritto al prossimo utilizzo della risorsa; per cui la funzione di
bloccaggio (come OwnBlitter che opera proprio in questo modo) se la risorsa
non è libera, inserirà il task nella lista del semaforo e ne restituerà il
controllo quando il processo ha effettivamente diritto di utilizzo.